Algorithmique
Quelles sont les valeurs des variables à la fin des algorithmes suivants : Variables entiers a, b a ← 3 b ← a + 15 a ← 1 Variables entiers a, b a ← 5 b ← a + 5 a ← a + 1 b ← a - 1 Variables entiers a, b a ← 3 b ← 10 c ← a + b b ← a + c a ← c

Un triangle $ABC$ rectangle en $C$ a pour longueurs $a$, $b$ et $c$ comme sur la figure ci-dessous :

Ecrire un algorithme dont les variables d'entrée sont trois flottants $a$ et $b$ représentant les deux longueurs des côtés issus de $C$, et qui a pour variable de sortie $c$ la longueur de l'hypothénuse.

Ecrire une suite d'instructions qui permet d'échanger les valeurs de deux variables d'entrée $A$ et $B$. Ecrire une suite d'instructions qui fasse circuler les valeurs de trois variables : $B$ prend la valeur de $A$, $C$ prend celle de $B$ et $C$ celle de $A$. On peut voir ci-dessous l'écran d'un petit jeu vidéo. Dans ce jeu, plusieurs variables sont utilisées :
  • S est la variable qui contient le score
  • P est la variable qui contient le nombre de pièces
  • C est la variable qui contient le nombre de coeurs
  • X et Y sont les variables qui contiennent l'abscisse et l'ordonnée du personnage (l'origine $(0;0)$ est en bas à gauche de l'écran de jeu.)
Pour faire une affectation, il faut taper dans commande : variable <-- valeur) Chaque pièce rapporte 30 points. De plus, à la fin du niveau, chaque coeur a rapporté 100 points. Ecrire une affectation qui modifie le score en conséquence. Ecrire une affectation qui déplace le personnage de 1 carreau vers la droite. De même pour la gauche. Ecrire une affectation qui déplace le personnage de 1 carreau vers le haut. De même pour le bas.

On note $a \% n$ le reste de la division euclidienne (positif) de $a$ par $n$. Par exemple, $1 \% 3 = 1$, $2 \% 3 = 2$, $3 \% 3 = 3$, $4 \% 3 = 1$, etc.

Dans le jeu pacman (voir ci-dessous), lorsque le personnage sort de l'écran (large de 300 pixels) à droite, il réapparaît à gauche et inversement :

La variable $x$ correspond à l'abscisse du pacman, en pixel. Compléter l'affectation suivante qui réalise un déplacement vers la droite de 1 pixel : x ← ........... Ecrire l'affectation qui réalise un déplacement vers la gauche de 1 pixel.
Dans chaque cas, déterminer la valeur de la variable affectée : a ← (3 > 1) b ← (non (a) et (2 = (1+1))) c ← (non (5 = 4) ≠ Vrai ) d ← ((a=b) ou c)
Voici un algorithme : n ← longueur de L Pour i de 0 à n-1 D[i] ← C[n-i] fin Pour Renvoyer D Si l'on place la chaîne de caractère "Bonjour" en entrée, quelle sera la variable de sortie ? Expliquez simplement le but de cet algorithme En modifiant l'algorithme précédent, écrire un algorithme qui vérifie si un mot est un palindrome : la variable renvoyée en sortie vaudra Vrai si c'est le cas, Faux sinon. Ecrire un algorithme qui :
  • prend en variable d'entrée une chaîne de longueur quelconque et renvoie un entier s en sortie
  • parcourt la chaîne de droite à gauche en testant à chaque caractère si il s'agit d'un "a", et incrémente la variable s si c'est le cas
  • la varible de sortie s doit contenir le nombre de "a" présent dans la chaîne
Modifier l'algorithme précédent pour que la variable de sortie soit une liste L de longueur 26 dans laquelle L[0] contient le nombre de "a", L[1] le nombre de "b", ... , L[25] le nombre de "z".
On considère que l'on a la fonction qui calcule la partie entière. Par exemple, ENT (3.1) = 3 et ENT (1.9) = 1 On considère l'algorithme suivant : Entrée : flottant x Variable : booléen s si ENT (x) = x s = Vrai sinon s = Faux fin si Sortie : s À quoi sert cet algorithme ? S'inspirer de cet algorithme pour en proposer un autre qui renvoie Vrai si la variable d'entrée est un nombre entier pair, et Faux sinon. Écrire un algorithme qui, étant donné les coordonnées x et y d’un point (deux flottants), détermine dans quelle partie (NE,NO, SO ou SE) du plan se trouve le point. $$ \begin{array}{c|c} NO & NE \\ \hline SO & SE \end{array} $$ Attention, si le point est sur un axe, il se trouvera dans une des position N, E, O ou S. Le cas de l'origine pourra être mis au N par exemple.

Lorsqu'une année est bisextile, elle compte 366 jours au lieu de 365 (29 jours en février). Une année est bisextile si elle est divisible par 4 et pas par 100 ou bien si elle est divisible par 400.

Par exemple, 2014 n'est pas bisextille, 2008 est bisextile car divisible par 4. L'an 1900 n'était pas bisextile car divisible par 100, mais 2000 l'était car divisible par 400.

Ecrire un test qui permet de vérifier si un nombre entier n'est pas divisible par 4. Même question avec 100, puis avec 400. Ecrire un algorithme qui teste les différents cas, et renvoie Vrai si l'année est bisextile, Faux sinon.
On peut voir ci-dessous l'écran d'un petit jeu vidéo. A droite, on voit les valeurs des variables utilisées :
  • S, pour le score, P pour les pièces, et C pour le nombre de coeurs
  • X et Y sont les variables qui contiennent l'abscisse et l'ordonnée du personnage (l'origine $(0;0)$ est en bas à gauche de l'écran de jeu.)
  • gameover est un booléen. Quand le jeu démarre, il vaut faux. Si il prend la valeur vrai, le jeu s'arrête
  • plouf est un booléen. Quand il vaut le personnage affiché est normal. Si il vaut faux, le personnage affiché est immergé.
  • Les instructions que vous entrez seront exécutées à chaque fois que vous déplacez le personnage avec les flèches du clavier.
  • Il est possible d'exécuter directement les instructions en cliquant sur
  • Si vous souhaitez réinitialiser le jeu, vous pouvez taper l'instruction init() et l'exécuter
La zone d'eau à droite commence pour x=17. Entrer les instructions suivantes, et déplacer le personnage dans cette zone. si x > 16 alors plouf <-- vrai fin A quoi servent ces instructions (expliquer chaque ligne). Proposer une suite d'instructions qui permettent au personnage :
  • d'être immergé quand il entre dans l'eau à droite
  • d'apparaître normalement quand il sort de cette zone
Proposer une suite d'instructions qui font la même chose pour la zone d'eau en haut à gauche remarque( Il est possible d'utiliser les connecteurs logiques "et" et "ou". Proposer une suite d'instructions qui provoquent le gameover si le personnage tombe dans le trou. On suppose que nager fatigue le personnage : modifier les instructions pour que le personnage perdre un coeur à chaque déplacement dans une zone d'eau.) Modifier les instructions pour que le gameover soit provoqué si il n'y a plus de coeurs.
Données d'entrée : $L_1$, $L_2$ et $L_3$ trois réels représentant les longueurs d'un triangle : On suppose que $L_1$ est la longueur la plus grande, écrire un algorithme EST_RECTANGLE_0 qui renvoie vrai si le triangle est rectangle et faux sinon. On ne sait pas quelle est la plus grande longueur, écrire un algorithme EST_RECTANGLE qui répond tout de même à la question (il est possible d'utiliser la fonction EST_RECTANGLE_0 pour raccourcir l'algorithme).
Nous allons utiliser une boucle pour "inverser" une liste de deux manière différentes : Ecrire un algorithme qui prend en variable d'entrée une liste, et qui retourne la liste des inverses. Par exemple, si l'entrée est $L = [2,3,4]$, la sortie devrait être $[\frac{1}{2}, \frac{1}{3}, \frac{1}{4}]$ Ecrire un algorithme qui prend en variable d'entrée une liste, et qui retourne la liste dans l'ordre inverse. Par exemple, si l'entrée est $L = [2,3,4]$, la sortie devrait être $[4,3,2]$ Ecrire un algorithme SOMME_INVERSES qui pour un $n$ donné, calcule la somme : $$ 1 + \frac{1}{2} + \frac{1}{3} + ... + \frac{1}{n} $$ Cette somme tend lentemps vers $+ \infty$ quand $n$ tend vers $+\infty$. En utilisant l'algorithme SOMME_INVERSES, écrire un algorithme DEPASSE qui a pour variable d'entrée un seuil $S$ et qui renvoie l'entier $N$ à partir duquel la somme dépasse $S$. Un damier de taille $N \times N$ est représenté par une liste de $N$ listes de longueurs $N$. Une valeur de 1 indique la présence d'un pion et 0 son absence. Par exemple, pour $N = 4$, le damier ci dessous peut-être représenté par : $$ D \leftarrow [\ [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 1, 0]\ ] $$ Ecrire un algorithme qui prend une de ces listes en variable d'entrée et qui retourne un entier valant le nombre de pions présents sur le damier en variable de sortie. Cet algorithme devra contenir deux boucles. Ecrire un algorithme qui retourne le nombre de pions sur un bord. On suppose que la valeur 1 représente un pion noir, et la valeur 2 un pion blanc. Deux pions adverses sont en position d'attaque si ils sont côte à côte, diagonalement. Ecrire un algorithme qui compte le nombre de pions en position d'attaque. Attention à ne pas compter deux fois une même position d'attaque.